iT邦幫忙

1

Ruby基本介紹(六)方法、類別、模組 && Reverse String

  • 分享至 

  • xImage
  •  

偶爾還是要聽點抒情點的...

Yes

韓劇推薦 : Live
第一集男女主角警校考試準備的那段蠻激勵人心的,對素人想轉職工程師的人而言,哈。


以下一樣只分享自己初學時常混淆的部分。
我沒有辦法寫得比書中更詳細。

方法(method)

以def定義

def method_name(參數) #方法不一定要有參數。
  #流程
end
#呼叫方式
method_name(參數)

#不是一定要加p或puts才是使用方法,p與puts是印出方法使用後回傳的結果。
#方法的名字符合變數的命名規則。

如下

2.7.3 :002 > def method_name(string)
2.7.3 :003 >   "#{string}"
2.7.3 :004 > end
 => :method_name 
2.7.3 :005 > method_name("test string")
 => "test string" 
2.7.3 :006 > p method_name("test string")
"test string"
 => "test string" 
#在進入Rails後,就會常看到這樣
2.7.3 :007 > def method_name(string)
2.7.3 :008 >   @test = "#{string}"
2.7.3 :009 > end
 => :method_name 
2.7.3 :012 > @test
 => "test string" 

@test是實體變數。


類別(class)

以class定義,以常數命名,不加參數,可繼承。Rails 中 class != model 。

calss Class_name
  def method1
    #流程
  end
  
  def method2
    #流程
  end
end

Rails常會看到

class Class_name < SpuerClassName
end

類別內可以有許多自己建立的"實體方法",由類別產生的"實體"都可使用這些方法,所以類別像一張設計圖,由這張設計圖設計出來的產物,我們稱為實體,實體由new這個"類別方法"產生出。

補充

類別方法:此類別可用的方法。基本建立方式如下

def self.method_name
  #流程
end
#self初期請想成那個類別自己。

自己建立的任何類別,都有自己本身內建的類別方法。

2.7.3 :037 > class Abc
2.7.3 :038 >   def initialize(string)
2.7.3 :039 >     @abc = string
2.7.3 :040 >   end
2.7.3 :041 >   
2.7.3 :042 >   def split()
2.7.3 :043 >     @abc.split
2.7.3 :044 >   end
2.7.3 :045 > end
 => :split 
2.7.3 :047 > Abc.superclass
 => Object

沒有指定的話,自行建立的類別都會繼承於Object類別。

實體方法:實體可以用的方法。
開始使用Rails後,就會更清楚了。


模組(Module)

用modlue定義

module Module_name
  def method_name
  end
end

在開發時,有一些功能(method),可能很多類別都會用到或是開發後發現重複,我們可以將這些方法集中成模組,讓類別"掛上去"使用。

class Class_name
  include Module_name  #掛上去的方式
end

衍生題:include,與extend差異?

模組與類別差異?

模組沒有new這個方法,所以不會有實體是模組new出來的。
模組之間沒有繼承

快可以開始介紹Rails了吧?


衍生題:進入Rails前還需要知道?

類別用new產生實體,new是內建方法,為何還需要自己建立initialize方法?
方法的存取控制:public、protected、private。
懶人三方法:attr_reader、attr_writer、attr_accessor。

這些不留到下篇當文章用了。請看好書來解惑,為自己學Ruby on Rails


Reverse String

連結:https://leetcode.com/problems/reverse-string/

def reverse_string(s)
  #實作
end

p reverse_string(["h","e","l","l","o"]) #=> ["o","l","l","e","h"]
p reverse_string(["H","a","n","n","a","h"]) #=> ["h","a","n","n","a","H"]

招喚黑魔法!

reverse!

def reverse_string(s)
  s.reverse!
end

結束,我太無恥了.....

在不知道黑魔法前我是這樣想的。
解法:建立一個新空陣列,從舊陣列由後開始一個一個擺進新陣列。
解法2:將陣列集合成一個字串,將字串反轉後,再拆成陣列。


我比較適合戰士!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言